<?xml version="1.0" encoding="utf-8"?>
<!--
                                                                                     
 h       t     t                ::       /     /                     t             / 
 h       t     t                ::      //    //                     t            // 
 h     ttttt ttttt ppppp sssss         //    //  y   y       sssss ttttt         //  
 hhhh    t     t   p   p s            //    //   y   y       s       t          //   
 h  hh   t     t   ppppp sssss       //    //    yyyyy       sssss   t         //    
 h   h   t     t   p         s  ::   /     /         y  ..       s   t    ..   /     
 h   h   t     t   p     sssss  ::   /     /     yyyyy  ..   sssss   t    ..   /     
                                                                                     
	<https://y.st./>
	Copyright © 2017 Alex Yst <mailto:copyright@y.st>

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program. If not, see <https://www.gnu.org./licenses/>.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<base href="https://y.st./en/weblog/2017/12-December/29.xhtml"/>
		<title>Hack assembler &lt;https://y.st./en/weblog/2017/12-December/29.xhtml&gt;</title>
		<link rel="icon" type="image/png" href="/link/CC_BY-SA_4.0/y.st./icon.png"/>
		<link rel="stylesheet" type="text/css" href="/link/main.css"/>
		<script type="text/javascript" src="/script/javascript.js"/>
		<meta name="viewport" content="width=device-width"/>
	</head>
	<body>
<nav>
	<p>
		<a href="/en/coursework/">Coursework</a> |
		<a href="/en/take-down/">Take-down requests</a> |
		<a href="/en/">Home</a> |
		<a href="/en/a/about.xhtml">About</a> |
		<a href="/en/a/contact.xhtml">Contact</a> |
		<a href="/a/canary.txt">Canary</a> |
		<a href="/en/URI_research/"><abbr title="Uniform Resource Identifier">URI</abbr> research</a> |
		<a href="/en/opinion/">Opinions</a> |
		<a href="/en/law/">Law</a> |
		<a href="/en/recipe/">Recipes</a> |
		<a href="/en/a/links.xhtml">Links</a> |
		<a href="/en/weblog/2017/12-December/29.xhtml.asc">{this page}.asc</a>
	</p>
	<hr/>
	<p>
		Weblog index:
		<a href="/en/weblog/memories">Memories</a> |
		<a href="/en/weblog/"><abbr title="American Standard Code for Information Interchange">ASCII</abbr> calendars</a> |
		<a href="/en/weblog/index_ol_ascending.xhtml">Ascending list</a> |
		<a href="/en/weblog/index_ol_descending.xhtml">Descending list</a>
	</p>
	<hr/>
	<p>
		Jump to entry:
		<a href="/en/weblog/2015/03-March/07.xhtml">&lt;&lt;First</a>
		<a rel="prev" href="/en/weblog/2017/12-December/28.xhtml">&lt;Previous</a>
		<a rel="next" href="/en/weblog/2017/12-December/30.xhtml">Next&gt;</a>
		<a href="/en/weblog/latest.xhtml">Latest&gt;&gt;</a>
			</p>
			<hr/>
</nav>
		<header>
			<h1>Hack assembler</h1>
			<p>Day 01028: <time>Friday, 2017 December 29</time></p>
		</header>
<section id="include.d">
	<h2>include.d version 0.0.1.7</h2>
	<p>
		Ugh.
		I don&apos;t feel well today.
		My faeces have been becoming increasingly liquidy, until today, I swear they were mostly water.
		And now I have a stomachache, can&apos;t keep hydrated, and am having difficulties focussing on my studies.
		I don&apos;t have time for this.
		Like last time, my dental appointment lands on my day off, the final day of the school week.
		I also spent much of yesterday, my other day off for the week, trying to find my way to the dentists&apos; office to even make the appointment.
		I need to keep on task.
		The workload this week is lower than normal, at least theoretically, but I&apos;m required to use an assembler that I was never able to get running.
		The professor has offered no help whatsoever, despite my several mentions to them that I couldn&apos;t get it working.
		That said, I didn&apos;t actually <strong>*ask*</strong> for help, so I can&apos;t complain too much, but I don&apos;t really feel like asking for help from someone that represents a school that doesn&apos;t seem to care.
	</p>
	<p>
		Anyway, to replace the assembler I have to use, I&apos;ve built my own assembler.
		It certainly enhanced my understanding of assemblers, but it also took a lot of time that I feel I don&apos;t have.
		Well, sort of don&apos;t have.
		As long as I keep focussed, this shouldn&apos;t be a problem.
	</p>
	<p>
		As a side note, it&apos;s interesting to me that the school&apos;s censorship rules can be applied in either direction.
		For example, I&apos;ve already posted my assembler publicly.
		This is a fact.
		However, we were never required to build it, assuming we got the supplied assembler working.
		That means that as long as I don&apos;t include my assembler in anything I submit to the school, I haven&apos;t broken any rules.
		However, if I <strong>*do*</strong> include it in my learning journal or in the discussion forum, even though my public posting of it will have come first, I&apos;ll be in violation of the rules.
		That means that to avoid trouble, I have to censor <strong>*what I&apos;m going to submit to the school*</strong>.
		I imagine that&apos;s not at all how they intended their rule, but it certainly will keep me out of trouble.
	</p>
	<p>
		Anyway, as I said, I&apos;ve posted my assembler publicly.
		The bulk of the work is done by a pair of new classes in my new <a href="https://notabug.org/y.st./include.d/releases">include.d release</a>, version 0.0.1.7.
		The rest of the work is done by this short script here:
	</p>
	<blockquote>
<pre><code>&lt;?php declare(strict_types=1);
/**
 * Copyright © 2017 Alex Yst &lt;mailto:copyright@y.st&gt;
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see &lt;http://www.gnu.org./licenses/&gt;.
**/

// Causes all errors to be terminal
require &apos;st/y/function/error_handler.php&apos;;
set_error_handler(&apos;\\st\\y\\error_handler&apos;);
// Sets the script up to used the classes from include.d
spl_autoload_register();

$input = file_get_contents($argv[1]);

$symbol = new \st\y\hack\symbol_table();
$lines = explode(&quot;\n&quot;, $input);
$address = 0;

foreach($lines as $l =&gt; &amp;$line):
	$comment = strpos($line, &apos;//&apos;);
	if($comment !== false):
		$line = substr($line, 0, $comment);
	endif;
	$line = preg_replace(&apos;{\\s}&apos;, &apos;&apos;, $line);
	$length = strlen($line);
	if($line == &apos;&apos;):
		unset($lines[$l]);
	elseif($line[0] == &apos;(&apos; and $line[$length-1] == &apos;)&apos;):
		$symbol[substr($line, 1, -1)] = $address;
		unset($lines[$l]);
	else:
		$address++;
	endif;
endforeach;
unset($line);

foreach($lines as $line):
	echo new \st\y\hack\instruction($line, $symbol), &quot;\n&quot;;
endforeach;</code></pre>
	</blockquote>
</section>
		<hr/>
		<p>
			Copyright © 2017 Alex Yst;
			You may modify and/or redistribute this document under the terms of the <a rel="license" href="/license/gpl-3.0-standalone.xhtml"><abbr title="GNU&apos;s Not Unix">GNU</abbr> <abbr title="General Public License version Three or later">GPLv3+</abbr></a>.
			If for some reason you would prefer to modify and/or distribute this document under other free copyleft terms, please ask me via email.
			My address is in the source comments near the top of this document.
			This license also applies to embedded content such as images.
			For more information on that, see <a href="/en/a/licensing.xhtml">licensing</a>.
		</p>
		<p>
			<abbr title="World Wide Web Consortium">W3C</abbr> standards are important.
			This document conforms to the <a href="https://validator.w3.org./nu/?doc=https%3A%2F%2Fy.st.%2Fen%2Fweblog%2F2017%2F12-December%2F29.xhtml"><abbr title="Extensible Hypertext Markup Language">XHTML</abbr> 5.2</a> specification and uses style sheets that conform to the <a href="http://jigsaw.w3.org./css-validator/validator?uri=https%3A%2F%2Fy.st.%2Fen%2Fweblog%2F2017%2F12-December%2F29.xhtml"><abbr title="Cascading Style Sheets">CSS</abbr>3</a> specification.
		</p>
	</body>
</html>

